import router from '@/router/index'
import axios from 'axios'
import {getToken} from '@/util/token/tokenUtil'
import {ElMessage} from 'element-plus'

const request = axios.create({
    // 这里可以放一下公用属性等。
    baseURL: process.env.VUE_APP_BASE_URL, // 用于配置请求接口公用部分，请求时会自动拼接在你定义的url前面。
    // baseURL: 'http://192.168.101.1:10001', // 用于配置请求接口公用部分，请求时会自动拼接在你定义的url前面。
    withCredentials: false, // 跨域请求时是否需要访问凭证
    timeout: 3 * 1000, // 请求超时时间
})

// 请求拦截器
request.interceptors.request.use((config) => {
    //token名称以自己的为定，我的是‘satoken’，如果不需要if这里就可以直接删掉
    if (getToken('token')) {
        config.headers['token'] = getToken('token'); //携带token
        config.headers['Content-type'] = 'application/json';
    }
    //检验是不是重复提交
    return config;
}, (error) => {
    console.log("请求错误", error)
    return Promise.reject(error)
})

request.interceptors.response.use((response) => {
        //返回码以自己的为定，如果没有安装elementui就换成自己的提示
        let {code, msg} = response.data
        if (code == null) {
            return response.data;
        }
        switch (code) {
            case 200:
                if (msg !== 'OK') {//默认的提示信息不管，对于其他提示信息可以显示
                    ElMessage.success(msg)
                }
                return response.data;
            case 404:
                router.push('/404')
                ElMessage.error(msg)
                break;
            case 401:
                window.sessionStorage.clear()
                ElMessage.error(msg)
                router.push('/login')
                break;
            case 403:
                ElMessage.error(msg)
                break;
            default ://上述都不满足的情况，一般把这个判断放在最后
                ElMessage.error(msg)
                break;
        }
        return Promise.reject(msg)
        // return response.data;
    },
    (error) => {
        //异常捕获
        ElMessage.error("响应出现问题啦:", error)
        return Promise.reject(error);
    }
)

export default request;
